package logger

import (
	"context"
	"log/slog"
	"os"
	"server/internal/core/constant"
)

// OTelHandler OpenTelemetry 风格的日志处理器
// 自动添加 trace_id 和自定义属性
type OTelHandler struct {
	slog.Handler
	attrs []slog.Attr
}

// NewOTelHandler 创建新的 OTel Handler
func NewOTelHandler(level slog.Level, attrs []slog.Attr) *OTelHandler {
	handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
		AddSource: true,
		Level:     level,
	})
	return &OTelHandler{
		Handler: handler,
		attrs:   attrs,
	}
}

// Handle 处理日志记录，自动注入 trace_id 和自定义属性
func (h *OTelHandler) Handle(ctx context.Context, r slog.Record) error {
	// 添加 trace_id 属性（如果存在）
	if traceID := ctx.Value(constant.TraceIDKey); traceID != nil {
		if tid, ok := traceID.(string); ok && tid != "" {
			r.AddAttrs(slog.String("trace_id", tid))
		}
	}

	// 调用底层 handler 处理
	return h.Handler.Handle(ctx, r)
}
